<?php
/**
 * Created by PhpStorm.
 * User: Fan
 * Date: 2018/7/18
 * Time: 16:26
 */

namespace Modules\Admin\Service;


use Modules\Admin\Entities\Module;

class ModuleService
{
    public function updateCache(){
        //添加新模块数据之前将模块表中的所有模块数据截断删除掉
        \DB::table('modules')->truncate();
        //HDModule::getModulesLists():获取模块列表，参数为不需要返回的模块，不传参数获取所有模块
        $modules = \HDModule::getModulesLists(['Admin']);
        //$dd = asset('');
        //dd($modules);
        //循环所有的模块数据，将每个模块的数据添加到modules表中
        foreach ($modules as $v){
            Module::create([
                'name' => $v['name'],
                'title' => $v['title'],
                'is_default' => 0,
                'home_access' => $this->is_home_access($v),
            ]);
        }
    }

    /**
     * 模块是否有前台访问功能
     * 我们规定，如果对应模块内，有一个叫做HomeController的类存在，并且这个类中有一个叫index的方法，我们就人文这个模块是可以前台访问的
     */
    public function is_home_access($module){
        //dd($module);
        //在方法内判断当前模块中是否存在HomeController
        $class = '\\Modules\\'.$module['name'].'\\Http\\Controllers\\HomeController';
        //echo $class;die;//\Modules\Admin\http\Controllers\HomeController
        //判断$class是否存在，并且判断$class里面的index方法是否存在
        //如果存在就返回一个真，不存在，就返回一个假
        //class_exists(类名)判断类是否存在
        //method_exists(类名,'方法名')//判断类里面的方法是否存在
        return class_exists($class) && method_exists($class,'index');
    }

    public function getDefault(){
        //找到允许前台访问并且是默认模板的数据
        $module = Module::where([
            ['home_access',1],
            ['is_default',1]
        ])->first();
        //dd($module);
        //允许前台访问，如果默认模块的数据不存在，就找到某个指定模块的数据访问
        $module = $module ? $module : Module::where('name','Shop')->first();
        //返回当前页面
        //dd($module);
        return $module;
    }

}